﻿// =============================================
// 文件保护宏：防止该头文件被重复包含（避免编译错误）
// 如果尚未定义 CUSTOM_COMMON_INCLUDED，则定义它并继续编译此文件内容
// =============================================
#ifndef CUSTOM_COMMON_INCLUDED
#define CUSTOM_COMMON_INCLUDED

// =============================================
// 引入 Unity 官方 SRP（可编程渲染管线）核心库中的 Common.hlsl
// 该文件定义了许多通用的数学工具、常量、辅助函数，是 SRP 开发的基础之一
// 路径一般是 Unity 内置包：Packages/com.unity.render-pipelines.core/...
// =============================================
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"

// =============================================
// 引入你自己定义（或项目自定义）的 Unity 输入常量定义头文件
// 根据代码上下文，我们推测 "UnityInput.hlsl" 就是你前面看到的那个
// 定义了 unity_ObjectToWorld、unity_MatrixVP 等常用矩阵的头文件
// （即你之前问过的 CUSTOM_UNITY_INPUT_INCLUDED 文件）
// =============================================
#include "UnityInput.hlsl"

// =============================================
// 为了让代码更可读、更符合 Unity 常见写法，这里为一些内置矩阵定义了更直观的宏别名
// 这些宏让你可以在后续代码中直接使用如 UNITY_MATRIX_M，而不是每次都写 unity_ObjectToWorld
// =============================================

// UNITY_MATRIX_M：模型矩阵（Model Matrix），物体空间 → 世界空间
// 对应变量：unity_ObjectToWorld
#define UNITY_MATRIX_M unity_ObjectToWorld

// UNITY_MATRIX_I_M：模型矩阵的逆矩阵，世界空间 → 物体空间
// 通常用于法线变换，对应变量：unity_WorldToObject
#define UNITY_MATRIX_I_M unity_WorldToObject

// UNITY_MATRIX_V：视图矩阵（View Matrix），世界空间 → 摄像机（视图）空间
// 对应变量：unity_MatrixV
#define UNITY_MATRIX_V unity_MatrixV

// UNITY_MATRIX_I_V：视图矩阵的逆矩阵
// 对应变量：unity_MatrixInvV
#define UNITY_MATRIX_I_V unity_MatrixInvV

// UNITY_MATRIX_VP：View-Projection 矩阵，世界空间 → 裁剪空间
// 是 View 矩阵 × Projection 矩阵的组合，用于最终顶点变换到屏幕
// 对应变量：unity_MatrixVP
#define UNITY_MATRIX_VP unity_MatrixVP

// UNITY_PREV_MATRIX_M：上一帧的模型矩阵，用于帧间动画、运动模糊等
// 对应变量：unity_prev_MatrixM
#define UNITY_PREV_MATRIX_M unity_prev_MatrixM

// UNITY_PREV_MATRIX_I_M：上一帧模型矩阵的逆矩阵
// 对应变量：unity_prev_MatrixIM
#define UNITY_PREV_MATRIX_I_M unity_prev_MatrixIM

// UNITY_MATRIX_P：投影矩阵（Projection Matrix）
// 注意：这里使用的是 glstate_matrix_projection，是传统 GL 兼容矩阵，
// 但在大多数现代 SRP 中，通常使用 UNITY_MATRIX_VP 代替
// 对应变量：glstate_matrix_projection
#define UNITY_MATRIX_P glstate_matrix_projection

// =============================================
// 引入 Unity 官方 SRP Core 提供的 GPU Instancing 支持库
// 该文件提供了多物体批量渲染（GPU Instancing）所需的核心宏与功能
// 比如：UNITY_SETUP_INSTANCE_ID, UNITY_TRANSFER_INSTANCE_ID, UNITY_VERTEX_INPUT_INSTANCE_ID 等
// =============================================
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"

// =============================================
// 引入 Unity 官方 SRP Core 提供的空间变换工具库
// 包含各种空间（如世界、视图、切线、屏幕等）之间的坐标变换函数
// 比如：TransformWorldToObject(), TransformObjectToWorld(), TransformWorldToView() 等
// 这些函数可以极大简化坐标系之间转换的代码书写
// =============================================
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/SpaceTransforms.hlsl"

// =============================================
// 文件保护宏结束：表示 CUSTOM_COMMON_INCLUDED 已定义，防止重复 include
// =============================================
#endif